/**
 * 使用net 创建TCP数据通讯
 */
const net = require('net')

// 创建TCP服务器
// net.createServer((socket ) => {}) 这里的回调函数和下面的 on('connection') 回调函数是一样的, 且socket是被自动创建的，是net.socket的实例
let server = net.createServer()

/**
 * socket对象是 net.Socket 的实例，是node 底层自动创建的
 */
server.on('connection', (socket) => {
  console.log('有客户端连接')
  // console.log(server.address())
  /**
  * address:'::'
    family:'IPv6'
    port:8080
  */

  // console.log(socket.address())
  // { address: '::ffff:127.0.0.1', family: 'IPv6', port: 8080 }

  server.getConnections((err, count) => {
    if (err) {
      throw new Error(err)
    }

    console.log(`当前连接数：${count}`)

    // 设置最大的TCP 连接数为2
    server.maxConnections = 2

    server.close()
  })

  // console.log(socket)

  socket.end()
})

/**
 * 1、如果指定端口和地址被占用， 则抛出异常 -
 */
server.on('error', (e) => {
  console.log(e)
  if (e.code === `EADDRINUSE`) {
    console.log(`地址被占用，请重试`)
    // setTimeout(() => {
    //   server.close()
    //   server.listen(PORT, HOST)
    // }, 1000)
  }
})

// 这里的回调函数和 上面的  server.close(() => {}) 的回调是一样的
server.on('close', (err) => {
  console.log(err)

  console.log('服务器关闭')
})

server.listen(8080, () => {
  console.log('net 监听 8080端口')
})
